tail command
tail
- output the last part of files
The tail
command in Linux is a handy utility used to display the end (bottom) of a file or input. It’s perfect for checking recent log entries, monitoring file changes, or sampling the last few lines of text.
Usage: tail [OPTION]... [FILE]...
OPTION
: Flags which enhances thetail
abilities.FILE
: The file(s) to read (optional; reads from input if omitted).
Print the last 10 lines of each FILE
to standard output. With more than one FILE
, precede each with a header giving the file name. With no FILE
, or when FILE
is -
, read standard input.
Examples
-
Basic Usage
By default,
tail
shows the last 10 lines of a file.$ tail logfile.txt
- Prints the last 10 lines of
logfile.txt
. - If the file has fewer than 10 lines, it shows the entire file.
- Prints the last 10 lines of
-
Specifying Number of Lines
Use
-n
followed by a number to display a specific number of lines from the end.$ tail -n 5 logfile.txt
- Shows the last 5 lines of
logfile.txt
.
Shorthand:
Omit
-n
and use a dash with a number:$ tail -5 logfile.txt
- Same as above.
- Shows the last 5 lines of
-
Specifying Bytes Instead of Lines
Use
-c
to display a specific number of bytes from the end.$ tail -c 20 logfile.txt
- Prints the last 20 bytes of
logfile.txt
(useful for binary files or precise cuts).
- Prints the last 20 bytes of
-
Following a File (Real-Time Updates)
Use
-f
(follow) to monitor a file as it grows, like a live log.$ tail -f logfile.txt
- Displays the last 10 lines and updates as new lines are added (e.g., for active logs).
- Press
Ctrl+C
to stop.
Start with Specific Lines:
$ tail -n 2 -f logfile.txt
- Shows the last 2 lines and follows from there.
-
Working with Multiple Files
Pass multiple files to see the end of each one.
$ tail file1.txt file2.txt
- Output shows the last 10 lines of
file1.txt
, thenfile2.txt
, with headers like==> file1.txt <==
.
Quiet Mode:
Use
-q
to suppress headers:$ tail -q -n 5 file1.txt file2.txt
- Shows 5 lines from each file without headers.
- Output shows the last 10 lines of
-
Verbose Output
Add
-v
to always show file headers, even for a single file.$ tail -v -n 5 logfile.txt
- Output starts with
==> logfile.txt <==
followed by the last 5 lines.
- Output starts with
To get help related to the tail
command use --help
option
$ tail --help
Usage: tail [OPTION]... [FILE]...
Print the last 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-c, --bytes=[+]NUM output the last NUM bytes; or use -c +NUM to
output starting with byte NUM of each file
-f, --follow[={name|descriptor}]
output appended data as the file grows;
an absent option argument means 'descriptor'
-F same as --follow=name --retry
-n, --lines=[+]NUM output the last NUM lines, instead of the last 10;
or use -n +NUM to output starting with line NUM
--max-unchanged-stats=N
with --follow=name, reopen a FILE which has not
changed size after N (default 5) iterations
to see if it has been unlinked or renamed
(this is the usual case of rotated log files);
with inotify, this option is rarely useful
--pid=PID with -f, terminate after process ID, PID dies
-q, --quiet, --silent never output headers giving file names
--retry keep trying to open a file if it is inaccessible
-s, --sleep-interval=N with -f, sleep for approximately N seconds
(default 1.0) between iterations;
with inotify and --pid=P, check process P at
least once every N seconds
-v, --verbose always output headers giving file names
-z, --zero-terminated line delimiter is NUL, not newline
--help display this help and exit
--version output version information and exit
NUM may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
Binary prefixes can be used, too: KiB=K, MiB=M, and so on.
With --follow (-f), tail defaults to following the file descriptor, which
means that even if a tail'ed file is renamed, tail will continue to track
its end. This default behavior is not desirable when you really want to
track the actual name of the file, not the file descriptor (e.g., log
rotation). Use --follow=name in that case. That causes tail to track the
named file in a way that accommodates renaming, removal and creation.